ํ๋ก ํธ์๋ ๋น๋ ์ต์ ํ ๊ธฐ์ (๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน)์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋์ ๋๋ค. ์น์ฌ์ดํธ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
ํ๋ก ํธ์๋ ๋น๋ ์ต์ ํ: ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน ๋ง์คํฐํ๊ธฐ
์ค๋๋ ์ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์๋ ๊ธฐ๊ธฐ๋ ์์น์ ๊ด๊ณ์์ด ์น์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ ๋ถ๋๋ฝ๊ฒ ์ํธ ์์ฉํ๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ์ฑ๋ฅ ์ ํ๋ ๋ ๋์ ์ดํ๋ฅ , ๋ฎ์ ์ฐธ์ฌ์จ, ๊ถ๊ทน์ ์ผ๋ก ๋น์ฆ๋์ค์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ต์ ์ ํ๋ก ํธ์๋ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ ์ ๋ต์ ์ธ ๋น๋ ์ต์ ํ, ํนํ ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ์ง์คํ๋ ๊ฒ์ ๋๋ค.
๋ฌธ์ ์ดํด: ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค
์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๋ฐฉ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์์ํฌ ๋ฐ ์ฌ์ฉ์ ์ ์ ์ฝ๋ ์ํ๊ณ์ ์์กดํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ด๋ก๋ํ์ฌ ์คํํด์ผ ํ๋ ์ต์ข ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ์๋นํ ์ปค์ง ์ ์์ต๋๋ค. ๋ํ ๋ฒ๋ค์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํฉ๋๋ค.
- ๋ก๋ฉ ์๊ฐ ์ฆ๊ฐ: ๋ธ๋ผ์ฐ์ ๋ ๋ ํฐ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐ ๋ ๋ง์ ์๊ฐ์ด ํ์ํฉ๋๋ค.
- ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ์๋น: ๋ํ ๋ฒ๋ค์ ์ฒ๋ฆฌํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ ์ธก์์ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ์ง์ฐ๋ ์ํธ ์์ฉ: ์น์ฌ์ดํธ๊ฐ ์์ ํ ์ํธ ์์ฉํ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ฐ์ฅ๋ฉ๋๋ค.
๋์ฟ์ ์๋ ์ฌ์ฉ์๊ฐ ๋ด์์ ์๋ ์๋ฒ์์ ํธ์คํ ๋๋ ์น์ฌ์ดํธ์ ์ ์ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณด์ธ์. ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋๊ธฐ ์๊ฐ๊ณผ ๋์ญํญ ์ ํ์ ์ ํ์์ผ ๋์ ๋๊ฒ ๋๋ฆฐ ๊ฒฝํ์ ์ด๋ํฉ๋๋ค.
๋ฒ๋ค ๋ถํ : ๋ถํ ์ ๋ณต
๋ฒ๋ค ๋ถํ ์ด๋ ๋ฌด์์ธ๊ฐ์?
๋ฒ๋ค ๋ถํ ์ ๋จ์ผ ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ๋ก ๋๋๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์ด๊ธฐ ๋ณด๊ธฐ์ ํ์ํ ์ฝ๋๋ง ๋ค์ด๋ก๋ํ๊ณ , ์ค์ ๋ก ํ์ํ ๋๊น์ง ๋ ์ค์ํ ์ฝ๋์ ๋ก๋ฉ์ ์ฐ๊ธฐํ ์ ์์ต๋๋ค.
๋ฒ๋ค ๋ถํ ์ ์ฅ์
- ์ด๊ธฐ ๋ก๋ ์๊ฐ ๊ฐ์ : ํ์ ์ฝ๋๋ง ๋จผ์ ๋ก๋ํ๋ฉด ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์๊ฐ์ด ํ์ ํ ์ค์ด๋ญ๋๋ค.
- ํฅ์๋ ์บ์ฑ ํจ์จ์ฑ: ๋ ์์ ๋ฒ๋ค์ ๋ธ๋ผ์ฐ์ ์์ ๋ ํจ๊ณผ์ ์ผ๋ก ์บ์ฑํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋์ด๋ ์ ์ฒด ์บ์๊ฐ ๋ฌดํจํ๋์ง ์์ ํ์ ๋ฐฉ๋ฌธ์ด ๋ ๋นจ๋ผ์ง๋๋ค.
- TTI(Time to Interactive) ๊ฐ์: ์ฌ์ฉ์๋ ์น์ฌ์ดํธ์ ๋ ๋นจ๋ฆฌ ์ํธ ์์ฉ์ ์์ํ ์ ์์ต๋๋ค.
- ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์น์ฌ์ดํธ๋ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ธฐ์ฌํ์ฌ ์ฐธ์ฌ์ ๋ง์กฑ๋๋ฅผ ๋์ ๋๋ค.
๋ฒ๋ค ๋ถํ ์๋ ๋ฐฉ์
๋ฒ๋ค ๋ถํ ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๋ฒ๋ค๋ฌ(Webpack, Rollup ๋๋ Parcel ๋ฑ)๋ฅผ ๊ตฌ์ฑํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์์ฑ์ ๋ถ์ํ๊ณ ๋ค์ํ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ณ๋์ ๋ฒ๋ค์ ์์ฑํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ฒ๋ค ๋ถํ ์ ๋ต:
- ์ง์ ์ : ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ์ง์ ์ (์: ๋ค๋ฅธ ํ์ด์ง ๋๋ ์น์ )์ ๋ํด ๋ณ๋์ ๋ฒ๋ค์ ์์ฑํ ์ ์์ต๋๋ค.
- ๋ฒค๋ ๋ฒ๋ค: ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ณ๋๋ก ๋ฒ๋ค๋งํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฒค๋ ์ฝ๋๊ฐ ๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ฏ๋ก ๋ ๋์ ์บ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋์ ๊ฐ์ ธ์ค๊ธฐ(์ฝ๋ ๋ถํ ): ๋์ ๊ฐ์ ธ์ค๊ธฐ(
import())๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋๋ง ์ฝ๋๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์ ์ฆ์ ํ์๋๊ฑฐ๋ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ๋ฅ์ ํนํ ์ ์ฉํฉ๋๋ค.
Webpack์ ์ฌ์ฉํ ์์(๊ฐ๋ ):
Webpack ๊ตฌ์ฑ์ ์ด๋ฌํ ์ ๋ต์ ๊ตฌํํ๋๋ก ๋ง์ถคํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ณ๋์ ๋ฒค๋ ๋ฒ๋ค์ ์์ฑํ๋๋ก Webpack์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
module.exports = {
// ... other configurations
entry: {
main: './src/index.js',
vendor: ['react', 'react-dom', 'lodash'] // Example vendor libraries
},
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\/]node_modules[\/]/,
name: 'vendor',
chunks: 'all',
},
},
},
},
};
์ด ๊ตฌ์ฑ์ Webpack์ node_modules ๋๋ ํฐ๋ฆฌ์์ ์ง์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋ "vendor"๋ผ๋ ๋ณ๋์ ๋ฒ๋ค์ ์์ฑํ๋๋ก ์ง์ํฉ๋๋ค.
๋์ ๊ฐ์ ธ์ค๊ธฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
async function loadComponent() {
const module = await import('./my-component');
// Use the imported component
}
์ด๋ ๊ฒ ํ๋ฉด loadComponent ํจ์๊ฐ ํธ์ถ๋ ๋๋ง ๋ก๋๋๋ ./my-component์ ๋ํ ๋ณ๋์ ์ฒญํฌ๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด๋ฅผ ์ฝ๋ ๋ถํ ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฒ๋ค ๋ถํ ์ ๋ํ ์ค์ ๊ณ ๋ ค ์ฌํญ
- ์ ํ๋ฆฌ์ผ์ด์ ๋ถ์: Webpack Bundle Analyzer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค์ ์๊ฐํํ๊ณ ์ต์ ํ ์์ญ์ ์๋ณํฉ๋๋ค.
- ๋ฒ๋ค๋ฌ ๊ตฌ์ฑ: ์ํ๋ ๋ถํ ์ ๋ต์ ๊ตฌํํ๋ ค๋ฉด ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ ์คํ๊ฒ ๊ตฌ์ฑํ์ธ์.
- ์ฒ ์ ํ ํ ์คํธ: ๋ฒ๋ค ๋ถํ ์ด ํ๊ท ๋๋ ์๊ธฐ์น ์์ ๋์์ ์ ๋ฐํ์ง ์๋์ง ํ์ธํฉ๋๋ค. ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๊ธฐ์์ ํ ์คํธํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ๋ฒ๋ค ๋ถํ ์ด ์์๋๋ ์ด์ ์ ์ ๊ณตํ๋์ง ํ์ธํ๋ ค๋ฉด ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ธ์.
ํธ๋ฆฌ ์์ดํน: ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ
ํธ๋ฆฌ ์์ดํน์ด๋ ๋ฌด์์ธ๊ฐ์?
ํธ๋ฆฌ ์์ดํน์ ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ๋ผ๊ณ ๋ ํ๋ฉฐ, ์ต์ข ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ์ ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ ๋ก ์คํ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํฉ๋๋ค.
๋ช ๊ฐ์ง ํจ์๋ง ์ฌ์ฉํ๋ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ํด ๋ณด์ธ์. ํธ๋ฆฌ ์์ดํน์ ํด๋น ํจ์์ ์ข ์์ฑ๋ง ๋ฒ๋ค์ ํฌํจ๋๊ณ , ์ฌ์ฉํ์ง ์๋ ๋๋จธ์ง ์ฝ๋๋ ์ ์ธ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
ํธ๋ฆฌ ์์ดํน์ ์ฅ์
- ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์: ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ํธ๋ฆฌ ์์ดํน์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๋ ์์ ๋ฒ๋ค์ ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ๊ณ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋ ๋์ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ์ฑ: ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ฉด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ๊นจ๋ํ๊ณ ์ฝ๊ฒ ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
ํธ๋ฆฌ ์์ดํน ์๋ ๋ฐฉ์
ํธ๋ฆฌ ์์ดํน์ ์ฝ๋๋ฅผ ์ ์ ์ผ๋ก ๋ถ์ํ์ฌ ์ค์ ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ๊ฒฐ์ ํฉ๋๋ค. Webpack ๋ฐ Rollup๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ด ๋ถ์์ ์ฌ์ฉํ์ฌ ๋น๋ ํ๋ก์ธ์ค ์ค์ ๋ฐ๋ ์ฝ๋๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํฉ๋๋ค.
ํจ๊ณผ์ ์ธ ํธ๋ฆฌ ์์ดํน์ ํ์ํ ์ฌํญ
- ES ๋ชจ๋(ESM): ํธ๋ฆฌ ์์ดํน์ ES ๋ชจ๋(
import๋ฐexport๊ตฌ๋ฌธ)์์ ๊ฐ์ฅ ์ ์๋ํฉ๋๋ค. ESM์ ์ฌ์ฉํ๋ฉด ๋ฒ๋ค๋ฌ๊ฐ ์ข ์์ฑ์ ์ ์ ์ผ๋ก ๋ถ์ํ๊ณ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ ์ ์์ต๋๋ค. - ์์ ํจ์: ํธ๋ฆฌ ์์ดํน์ ๋ถ์์ฉ์ด ์๊ณ ๋์ผํ ์ ๋ ฅ์ ๋ํด ํญ์ ๋์ผํ ์ถ๋ ฅ์ ๋ฐํํ๋ "์์" ํจ์์ ๊ฐ๋ ์ ์์กดํฉ๋๋ค.
- ๋ถ์์ฉ: ๋ชจ๋์์ ๋ถ์์ฉ์ ํผํ๊ฑฐ๋
package.jsonํ์ผ์์ ๋ช ์์ ์ผ๋ก ์ ์ธํฉ๋๋ค. ๋ถ์์ฉ์ด ์์ผ๋ฉด ๋ฒ๋ค๋ฌ๊ฐ ์์ ํ๊ฒ ์ ๊ฑฐํ ์ ์๋ ์ฝ๋๋ฅผ ๊ฒฐ์ ํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค.
ES ๋ชจ๋์ ์ฌ์ฉํ ์์:
๋ค์์ ๋ ๊ฐ์ ๋ชจ๋์ด ์๋ ์์์ ๋๋ค.
moduleA.js:
export function myFunctionA() {
console.log('Function A is executed');
}
export function myFunctionB() {
console.log('Function B is executed');
}
index.js:
import { myFunctionA } from './moduleA';
myFunctionA();
์ด ๊ฒฝ์ฐ myFunctionA๋ง ์ฌ์ฉ๋ฉ๋๋ค. ํธ๋ฆฌ ์์ดํน์ด ํ์ฑํ๋ ๋ฒ๋ค๋ฌ๋ ์ต์ข
๋ฒ๋ค์์ myFunctionB๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
ํธ๋ฆฌ ์์ดํน์ ๋ํ ์ค์ ๊ณ ๋ ค ์ฌํญ
- ES ๋ชจ๋ ์ฌ์ฉ: ์ฝ๋๋ฒ ์ด์ค ๋ฐ ์ข ์์ฑ์ด ES ๋ชจ๋์ ์ฌ์ฉํ๋์ง ํ์ธํฉ๋๋ค.
- ๋ถ์์ฉ ๋ฐฉ์ง: ๋ชจ๋์์ ๋ถ์์ฉ์ ์ต์ํํ๊ฑฐ๋ "sideEffects" ์์ฑ์ ์ฌ์ฉํ์ฌ
package.json์์ ๋ช ์์ ์ผ๋ก ์ ์ธํฉ๋๋ค. - ํธ๋ฆฌ ์์ดํน ํ์ธ: Webpack Bundle Analyzer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ์์ดํน์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
- ์ข ์์ฑ ์ ๋ฐ์ดํธ: ์ต์ ํธ๋ฆฌ ์์ดํน ์ต์ ํ์ ์ด์ ์ ์ป์ผ๋ ค๋ฉด ์ข ์์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ์ธ์.
๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ์๋์ง ํจ๊ณผ
๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ํ๋ก ํธ์๋ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ํจ๊ป ์๋ํ๋ ์ํธ ๋ณด์์ ์ธ ๊ธฐ์ ์ ๋๋ค. ๋ฒ๋ค ๋ถํ ์ ์ฒ์์ ๋ค์ด๋ก๋ํด์ผ ํ๋ ์ฝ๋์ ์์ ์ค์ด๊ณ , ํธ๋ฆฌ ์์ดํน์ ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ต์ํํฉ๋๋ค.
๋ฒ๋ค ๋ถํ ๊ณผ ํธ๋ฆฌ ์์ดํน์ ๋ชจ๋ ๊ตฌํํ๋ฉด ์๋นํ ์ฑ๋ฅ ํฅ์์ ๋ฌ์ฑํ์ฌ ๋ ๋น ๋ฅด๊ณ , ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ , ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ป์ ์ ์์ต๋๋ค.
์ ํฉํ ๋๊ตฌ ์ ํ
๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Webpack: ๋ฒ๋ค ๋ถํ ๊ณผ ํธ๋ฆฌ ์์ดํน์ ๋ชจ๋ ์ง์ํ๋ ๊ฐ๋ ฅํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค.
- Rollup: ๋ฐ์ด๋ ํธ๋ฆฌ ์์ดํน ๊ธฐ๋ฅ์ ๊ฐ์ถ, ๋ ์๊ณ ํจ์จ์ ์ธ ๋ฒ๋ค์ ์์ฑํ๋๋ก ํน๋ณํ ์ค๊ณ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค.
- Parcel: ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ ์ ๋ก ๊ตฌ์ฑ ๋ฒ๋ค๋ฌ์ ๋๋ค.
- esbuild: Go๋ก ์์ฑ๋ ๋งค์ฐ ๋น ๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค๋ฌ ๋ฐ ์ถ์๊ธฐ์ ๋๋ค. ์๋์ ํจ์จ์ฑ์ผ๋ก ์ ๋ช ํฉ๋๋ค.
ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ ํฉํ ๋๊ตฌ๋ ํน์ ์๊ตฌ ์ฌํญ ๋ฐ ๊ธฐ๋ณธ ์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ฌ์ฉ ํธ์์ฑ, ๊ตฌ์ฑ ์ต์ , ์ฑ๋ฅ ๋ฐ ์ปค๋ฎค๋ํฐ ์ง์๊ณผ ๊ฐ์ ์์๋ฅผ ๊ณ ๋ คํ์ธ์.
์ค์ ์์ ๋ฐ ์ฌ๋ก ์ฐ๊ตฌ
๋ง์ ํ์ฌ์์ ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ์ฌ ์น์ฌ์ดํธ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์์ผฐ์ต๋๋ค.
- Netflix: Netflix๋ ์ ์ธ๊ณ ์๋ฐฑ๋ง ๋ช ์ ์ฌ์ฉ์์๊ฒ ๊ฐ์ธํ๋๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์คํธ๋ฆฌ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฝ๋ ๋ถํ ์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค.
- Airbnb: Airbnb๋ ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ๋ฒ๋ค ๋ถํ ๊ณผ ํธ๋ฆฌ ์์ดํน์ ํ์ฉํฉ๋๋ค.
- Google: Google์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ก๋๋๋๋ก ํ๊ธฐ ์ํด ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ํฌํจํ ๋ค์ํ ์ต์ ํ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ์๋ ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ด ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ์น ์ ์๋ ์๋นํ ์ํฅ์ ๋ณด์ฌ์ค๋๋ค.
๊ธฐ๋ณธ ์ฌํญ ์ธ: ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์
๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ์๋ฌํ ํ์๋ ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํค๊ธฐ ์ํด ๋ค๋ฅธ ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์ ์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
- ์ถ์: ์ฝ๋์์ ๊ณต๋ฐฑ ๋ฐ ์ฃผ์์ ์ ๊ฑฐํ์ฌ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
- ์์ถ: Gzip ๋๋ Brotli์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ์์ถํฉ๋๋ค.
- ์ง์ฐ ๋ก๋ฉ: ๋ทฐํฌํธ์ ํ์๋ ๋๋ง ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ์์ฐ์ ๋ก๋ํฉ๋๋ค.
- ์บ์ฑ: ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ค์ด๊ธฐ ์ํด ํจ๊ณผ์ ์ธ ์บ์ฑ ์ ๋ต์ ๊ตฌํํฉ๋๋ค.
- ์ฌ์ ๋ก๋ฉ: ์ค์ํ ์์ฐ์ ๋ฏธ๋ฆฌ ๋ก๋ํ์ฌ ์ธ์ง๋ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
๊ฒฐ๋ก
ํ๋ก ํธ์๋ ๋น๋ ์ต์ ํ๋ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ์ด ํ์ํ ์ง์์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ์๋ฌํ๋ฉด ์น์ฌ์ดํธ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์์ผ ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ํ๊ณ , ๋ฒ๋ค๋ฌ๋ฅผ ๊ตฌ์ฑํ๊ณ , ์ฒ ์ ํ๊ฒ ํ ์คํธํ๊ณ , ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ์ฌ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ์๋์ง ํ์ธํ์ญ์์ค. ๋ฆฌ์ฐ๋ฐ์๋ค์ด๋ฃจ์์ ์์ธ์ ์ด๋ฅด๊ธฐ๊น์ง ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋์ ์ฑ๋ฅ์ ์น์ ๋ง๋ค๋ ค๋ฉด ์ด๋ฌํ ๊ธฐ์ ์ ํ์ฉํ์ญ์์ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ
- ๋ฒ๋ค ๊ฐ์ฌ: Webpack Bundle Analyzer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ํ ์์ญ์ ์๋ณํฉ๋๋ค.
- ์ฝ๋ ๋ถํ ๊ตฌํ: ๋์ ๊ฐ์ ธ์ค๊ธฐ(
import())๋ฅผ ํ์ฉํ์ฌ ํ์์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋ก๋ํฉ๋๋ค. - ES ๋ชจ๋ ์ฌ์ฉ: ์ฝ๋๋ฒ ์ด์ค ๋ฐ ์ข ์์ฑ์ด ES ๋ชจ๋์ ์ฌ์ฉํ๋์ง ํ์ธํฉ๋๋ค.
- ๋ฒ๋ค๋ฌ ๊ตฌ์ฑ: ์ต์ ์ ๋ฒ๋ค ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ๋ฌ์ฑํ๋ ค๋ฉด Webpack, Rollup, Parcel ๋๋ esbuild๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํฉ๋๋ค.
- ์ฑ๋ฅ ์งํ ๋ชจ๋ํฐ๋ง: Google PageSpeed Insights ๋๋ WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ์ถ์ ํฉ๋๋ค.
- ์ต์ ์ ๋ณด ์ ์ง: ํ๋ก ํธ์๋ ๋น๋ ์ต์ ํ์ ๋ํ ์ต์ ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ธฐ์ ์ ์ต์ ์ํ๋ก ์ ์งํฉ๋๋ค.